'use client';

import * as React from 'react';
import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';

import { cn } from '@/lib/utils';
import { buttonVariants } from '@/components/ui/button';

function AlertDialog({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {
   return <AlertDialogPrimitive.Root data-slot="alert-dialog" {...props} />;
}

function AlertDialogTrigger({
   ...props
}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {
   return <AlertDialogPrimitive.Trigger data-slot="alert-dialog-trigger" {...props} />;
}

function AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {
   return <AlertDialogPrimitive.Portal data-slot="alert-dialog-portal" {...props} />;
}

function AlertDialogOverlay({
   className,
   ...props
}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {
   return (
      <AlertDialogPrimitive.Overlay
         data-slot="alert-dialog-overlay"
         className={cn(
            'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80',
            className
         )}
         {...props}
      />
   );
}

function AlertDialogContent({
   className,
   ...props
}: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {
   return (
      <AlertDialogPortal>
         <AlertDialogOverlay />
         <AlertDialogPrimitive.Content
            data-slot="alert-dialog-content"
            className={cn(
               'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',
               className
            )}
            {...props}
         />
      </AlertDialogPortal>
   );
}

function AlertDialogHeader({ className, ...props }: React.ComponentProps<'div'>) {
   return (
      <div
         data-slot="alert-dialog-header"
         className={cn('flex flex-col gap-2 text-center sm:text-left', className)}
         {...props}
      />
   );
}

function AlertDialogFooter({ className, ...props }: React.ComponentProps<'div'>) {
   return (
      <div
         data-slot="alert-dialog-footer"
         className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)}
         {...props}
      />
   );
}

function AlertDialogTitle({
   className,
   ...props
}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {
   return (
      <AlertDialogPrimitive.Title
         data-slot="alert-dialog-title"
         className={cn('text-lg font-semibold', className)}
         {...props}
      />
   );
}

function AlertDialogDescription({
   className,
   ...props
}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {
   return (
      <AlertDialogPrimitive.Description
         data-slot="alert-dialog-description"
         className={cn('text-muted-foreground text-sm', className)}
         {...props}
      />
   );
}

function AlertDialogAction({
   className,
   ...props
}: React.ComponentProps<typeof AlertDialogPrimitive.Action>) {
   return <AlertDialogPrimitive.Action className={cn(buttonVariants(), className)} {...props} />;
}

function AlertDialogCancel({
   className,
   ...props
}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel>) {
   return (
      <AlertDialogPrimitive.Cancel
         className={cn(buttonVariants({ variant: 'outline' }), className)}
         {...props}
      />
   );
}

export {
   AlertDialog,
   AlertDialogPortal,
   AlertDialogOverlay,
   AlertDialogTrigger,
   AlertDialogContent,
   AlertDialogHeader,
   AlertDialogFooter,
   AlertDialogTitle,
   AlertDialogDescription,
   AlertDialogAction,
   AlertDialogCancel,
};
